ВещОселок.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                        ОТДЕЛ ВещОселок+;
(******************************************************************************
 * НАЗНАЧЕНИЕ: Скорость при двойной точности/Double precision Whetstone (A001)
 ******************************************************************************)
ИСПОЛЬЗУЕТ 
  Матем ИЗ "...\Отделы\Числа\",
  ОС    ИЗ "...\Отделы\Обмен\",
  Вывод ИЗ "...\Отделы\Обмен\";

ПОСТ
  NLoopValue = 100;
  IIValue    = 400;

ВИД
  ARRAY4 = РЯД 5 ИЗ ШИРВЕЩ;

ПЕР 
  E1     :ARRAY4;
  T,T1,T2:ШИРВЕЩ;
  J,K,L  :ЦЕЛ;

ЗАДАЧА PA(E+:ARRAY4);
ПЕР 
  J1:ЦЕЛ;
УКАЗ
  J1:=0;
  ПОВТОРЯТЬ
    E[1]:=( E[1]+E[2]+E[3]-E[4])*T;
    E[2]:=( E[1]+E[2]-E[3]+E[4])*T;
    E[3]:=( E[1]-E[2]+E[3]+E[4])*T;
    E[4]:=(-E[1]+E[2]+E[3]+E[4])/T2;
    J1:=J1+1
  ДО J1 >= 6
КОН PA;

ЗАДАЧА P0;
УКАЗ
  E1[J]:=E1[K]; 
  E1[K]:=E1[L]; 
  E1[L]:=E1[J]
КОН P0;

ЗАДАЧА P3(X,Y,Z+:ШИРВЕЩ);
ПЕР 
  X1,Y1:ШИРВЕЩ;
УКАЗ
  X1:=X;
  Y1:=Y;
  X1:=T*(X1+Y1);
  Y1:=T*(X1+Y1);
  Z:=(X1+Y1)/T2
КОН P3;

ЗАДАЧА POUT(N,J,K:ЦЕЛ; X1,X2,X3,X4:ШИРВЕЩ);
УКАЗ
КОН POUT;

ЗАДАЧА Work;
ПЕР 
  NLoop,I,II,JJ:ЦЕЛ;
  N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11:ЦЕЛ;
  X1,X2,X3,X4,X,Y,Z:ШИРВЕЩ;
УКАЗ
(* замер начинается здесь *)
  T :=0.499975;
  T1:=0.50025;
  T2:=2.0;
  NLoop:=NLoopValue;
  II:=IIValue;
  ОТ JJ:=1 ДО II ВЫП
(* установим соответствующее число повторов каждой части замера. *)
    N1:=0;
    N2:=12 *NLoop;
    N3:=14 *NLoop;
    N4:=345*NLoop;
    N5:=0;
    N6:=210*NLoop;
    N7:=32 *NLoop;
    N8:=899*NLoop;
    N9:=616*NLoop;
    N10:=0;
    N11:=93*NLoop;
(* Часть 1: Простые переменные *)
    X1:= 1.0;
    X2:=-1.0;
    X3:=-1.0;
    X4:=-1.0;
    ОТ I:=1 ДО N1 ВЫП
      X1:=( X1+X2+X3-X4)*T;
      X2:=( X1+X2-X3+X4)*T;
      X3:=( X1-X2+X3+X4)*T;
      X4:=(-X1+X2+X3+X4)*T;
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N1,N1,N1,X1,X2,X3,X4)
    КОН;
(* Часть 2: Переменные ряда *)
    E1[1]:= 1.0;
    E1[2]:=-1.0;
    E1[3]:=-1.0;
    E1[4]:=-1.0;
    ОТ I:=1 ДО N2 ВЫП
      E1[1]:=( E1[1]+E1[2]+E1[3]-E1[4])*T;
      E1[2]:=( E1[1]+E1[2]-E1[3]+E1[4])*T;
      E1[3]:=( E1[1]-E1[2]+E1[3]+E1[4])*T;
      E1[4]:=(-E1[1]+E1[2]+E1[3]+E1[4])*T
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N2,N3,N2,E1[1],E1[2],E1[3],E1[4])
    КОН;
(* Часть 3: Ряд, как источник задачи *)
    ОТ I:=1 ДО N3 ВЫП
      PA(E1)
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N3,N2,N2,E1[1],E1[2],E1[3],E1[4])
    КОН;
(* Часть 4: Условные переходы *)
    J:=1;
    ОТ I:=1 ДО N4 ВЫП
      ЕСЛИ J #  1 ТО J:=3 ИНАЧЕ J:=2 КОН;
      ЕСЛИ J <= 2 ТО J:=1 ИНАЧЕ J:=0 КОН;
      ЕСЛИ J >= 1 ТО J:=0 ИНАЧЕ J:=1 КОН
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N4,J,J,X1,X2,X3,X4)
    КОН;
(* Часть 5: Пропущена; Часть 6: Целочисленная арифметика *)
    J:=1;
    K:=2;
    L:=3;
    ОТ I:=1 ДО N6 ВЫП
      J:=J*(K-J)*(L-K);
      K:=L*K-(L-J)*K;
      L:=(L-K)*(K+J);
      E1[L-1]:=(J+K+L);
      E1[K-1]:=(J*K*L)
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N6,J,K,E1[1],E1[2],E1[3],E1[4])
    КОН;
(* Часть 7: Тригонометрические функции *)
    X:=0.5;
    Y:=0.5;
    ОТ I:=1 ДО N7 ВЫП
      X:=T*Матем.arctg(T2*Матем.sin(X)*Матем.cos(X)/(Матем.cos(X+Y)+Матем.cos(X-Y)-1.0));
      Y:=T*Матем.arctg(T2*Матем.sin(Y)*Матем.cos(Y)/(Матем.cos(X+Y)+Матем.cos(X-Y)-1.0))
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N7,J,K,X,X,Y,Y)
    КОН;
(* Часть 8: Вызов задач *)
    X:=1.0;
    Y:=1.0;
    Z:=1.0;
    ОТ I:=1 ДО N8 ВЫП
      P3(X,Y,Z)
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N8,J,K,X,Y,Z,Z)
    КОН;
(* Часть 9: Доступ к ряду *)
    J:=1;
    K:=2;
    L:=3;
    E1[1]:=1.0;
    E1[2]:=2.0;
    E1[3]:=3.0;
    ОТ I:=1 ДО N9 ВЫП
      P0
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N9,J,K,E1[1],E1[2],E1[3],E1[4])
    КОН;
(* Часть 10: Целочисленная арифметика *)
    J:=2;
    K:=3;
    ОТ I:=1 ДО N10 ВЫП
      J:=J+K;
      K:=J+K;
      J:=K-J;
      K:=K-J-J
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N10,J,K,X1,X2,X3,X4)
    КОН;
(* Часть 11: Математические функции *)
    X:=0.75;
    ОТ I:=1 ДО N11 ВЫП
      X:=Матем.квкор(Матем.exp(Матем.ln(X)/T1))
    КОН;
    ЕСЛИ JJ = II ТО
      POUT(N11,J,K,X,X,X,X)
    КОН
  КОН
КОН Work;

ЗАДАЧА Голова;
ПЕР 
  начВремя:ЦЕЛ;
УКАЗ
  Вывод.Цепь("Испытание на Whetstone");
  начВремя:=ОС.Время();
  Work;
  Вывод.ЧВещ(" - %f MIPS^",NLoopValue*IIValue*1000.0/(ОС.Время() - начВремя),0,0,0)
КОН Голова;

УКАЗ
  Голова
КОН ВещОселок.




Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы